33. 图像分类 CNN

21 图像分类 CNN RENDER V2

填充

填充是指在图像周围添加像素边界。在 PyTorch 中,你可以指定边界大小。

为何需要填充?

在创建卷积层时,我们使用中心像素作为锚点,并在图像上移动一个方形过滤器。这种卷积核无法完美地覆盖图像的边边角角。填充功能使我们能够控制输出的空间大小(最常见的用途是保留输入的空间大小,使输入和输出的宽度及高度一样)。

最常见的填充方法是用 0 像素填充图像(称为零填充),或者使用最近的像素值填充。要详细了解在给定核大小的情况下如何计算填充量,请参阅此页面

如何定义最大池化层,以便使输入下采样到 1/4 倍?(提示:多选题)

SOLUTION:
  • `nn.MaxPool2d(2, 4)`
  • `nn.MaxPool2d(4, 4)`

如果要定义一个 x-y 大小与输入数组一样的卷积层,并且 kernel_size 为 7,那么应该使用什么样的填充?(假定其他参数保持默认值)

SOLUTION: `padding=3`

PyTorch 层级

卷积层

通常,我们在 PyTorch 中使用 nn.Conv2d 定义卷积层,并指定以下参数:

nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0)
  • in_channels 是指输入深度。对于灰阶图像来说,深度 = 1
  • out_channels 是指输出深度,或你希望获得的过滤图像数量
  • kernel_size 是卷积核的大小(通常为 3,表示 3x3 核)
  • stridepadding 具有默认值,但是应该根据你希望输出在空间维度 x, y 里具有的大小设置它们的值

详情请参阅 Conv2d 文档

池化层

最大池化层通常位于卷积层之后,用于缩小输入的 x-y 维度
要详细了解 PyTorch 中的池化层,请参阅此文